
import pdfplumber
import pandas as pd
#专为武汉红十字设计的捐款pdf文件读取函数(能应对多种杂乱表格) 读入后返回字典列表(基金会 捐赠单位 日期 类型 金额 )
#file填入文件名 !!注本函数为专项函数 并不对其他来源pdf有普适性
#接口函数 传参file为文件本地路径 rq为数据源日期,jjh为基金会,
def read_pdf(file,jjh,rq="0000-00-00"):
    # 读取pdf
    pdf = pdfplumber.open(file)
    # 转为DF格式
    total_pd = pd.DataFrame()
    # 可读标志(为1表示可读)
    en_read = 0
    # info 保存取出的捐款数据
    infos = []
    # 遍历pdf全部页面
    for page in range(len(pdf.pages)):
        print("正在处理pdf",file,"第", page, "页")
        if len(pdf.pages) > 0:
            temp_table = pdf.pages[page].extract_table()  # 将该页面内容转为表格(此处为两层列表嵌套 子列表为每一行内容)
            tmp_name = ""  # 用来表示一条记录的捐款人(因为pdf读取容易出现一条记录读成2、3行)
            for row in temp_table:  # 遍历每一行内容
                for cell in row:  # 遍历每个cell
                    if None is cell:  # 如果是None跳过
                        continue
                    if en_read == 1:  # 如果已是可读 则开始记录
                        if ".00" in cell:  # 基本确定这里是金额
                            infos.append({"jjh":jjh,"jzdw": tmp_name,"rq":rq,"lx":"捐款", "je": cell})
                            tmp_name = ""
                        else:
                            tmp_name = tmp_name + cell
                    if "金额" in cell:  # 如果是字符串 判断一下是否包含金额(若是说明表头已结束 修改标志)
                        en_read = 1
    return infos



#专为武汉红十字设计的捐款pos机/二维码收款excel文件读取函数(能应对多种杂乱表格) 读入后返回字典列表(基金会 捐赠单位 日期 类型 金额 交易单号)
#file填入文件名 !!注本函数为专项函数 并不对其他来源excel有普适性
#接口函数 传参file为文件本地路径 rq为数据源日期,jjh为基金会,
def read_excel(file,jjh,rq="0000-00-00"):
    data = pd.read_excel(file, encoding="gbk")      #读入excel
    excel_data = data.values.tolist()               #转为列表操作
    infos = []
    for row in excel_data:                          #遍历行 整理为需要的格式
        infos.append({ "jjh":jjh ,"jzdw": "二维码/pos","rq":rq,"lx":"捐款","je": str(row[-1]),"jydh": row[0].strip()})
    return infos                                    #返回结果





